package ThreadingWait;

/**
 * 线程等待 : 线程中的调度顺序是不确定的, 但可以通过一些特殊操作,来对
 *          线程的执行顺序做出干预. 其中join就是一个办法,来控制线程之间的结束顺序!!
 *          比如 在 main 自线程调用 thread.join()的效果就是: 让main线程阻塞等待,等thread执行完了, main才继续执行!!
 *
 * Date: 2022-09-11  8月14 的课程内容
 * Time: 11:50
 */
public class TestDemo12 {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

        thread.start();

        System.out.println("main线程 join 之前");

        try {
            thread.join();  // 不带参数, 可以一直阻塞直到 thread 线程结束, 不见不散~~~
            // thread.join(long mills); //带一个参数(毫秒级别) , 只能阻塞这么长的时间, 过时不候~~
            // thread.join(long mills,int nanos); //带两个个参数(毫秒级别,纳秒级别), 只能阻塞 两个参数之和 的时间, 过时不候~~
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("main线程 join 之后");

    }
}
